package info.itloser.pltv.utils

import android.app.Activity
import android.content.Context
import android.graphics.Color
import android.os.Build
import android.view.View
import android.view.WindowInsets
import android.view.WindowInsetsController
import com.google.gson.Gson
import java.io.BufferedReader
import java.io.InputStreamReader

/**
 * 说明： 工具类
 * 作者： itloser.info
 * 日期： 2022/1/7 11:05
 * 备注： 整合一些需要很多行代码的内容
 */
object PLtvUtil {

    //声明一个全局Gson 用于复用
    private val gson = Gson()

    /**
     * 读取Json文件
     *
     * 读取assets 下的文件 https://www.jianshu.com/p/8adaaaf52580
     * Kotlin while循环读取文件 https://blog.csdn.net/weixin_34406086/article/details/91471722
     */
    fun readStringFromAssets(context: Context, fileName: String): String {

        //构造 StringBuilder 用于接收读取出来的String字符串
        val stringBuilder: StringBuilder = StringBuilder()

        //读取 assets下的文件
        val bufferedReader = BufferedReader(InputStreamReader(context.assets.open(fileName)))

        var line: String?

        while ((bufferedReader.readLine().also { line = it }) != null) {
            stringBuilder.append(line)
        }

        return stringBuilder.toString()
    }

    /**
     * 将json字符串转换成指定的类
     *
     * Kotlin 泛型 https://blog.csdn.net/zhangying1994/article/details/104345243 https://www.jianshu.com/p/af66079e2cf5
     * Gson 解析 https://www.jianshu.com/p/af66079e2cf5
     */
    fun <T> gsonToBean(jsonString: String, beanClass: Class<T>): T {
        return gson.fromJson(jsonString, beanClass)
    }

    /**
     * 沉浸式状态栏
     */
    fun setTopAndBottomTransparentAndTextBlack(activity: Activity) {


        //获取获得页面的窗口
        val window = activity.window

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {

            //Android11以上的操作 注意该API在 androidAPI-30加入 所以 < Android11的版本 该方法不可用

            //获取 windowInsetsController 实例
            val windowController = window.insetsController

            //设置 状态栏 主题为 黑色
            windowController?.setSystemBarsAppearance(
                WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS,
                WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS
            )

            //自动隐藏导航栏（在不触发手势时）
            windowController?.systemBarsBehavior =
                WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE

            //隐藏状态栏
            windowController?.hide(WindowInsets.Type.statusBars())

            //隐藏导航栏
            windowController?.hide(WindowInsets.Type.navigationBars())

        } else {

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                window.decorView.systemUiVisibility =
                    View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
            } else {
                window.decorView.systemUiVisibility =
                    View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            }

            //设置状态栏 透明
            window.statusBarColor = Color.TRANSPARENT

            //这是导航栏 透明
            window.navigationBarColor = Color.TRANSPARENT

        }


    }


}